package com.结构型模型.H代理模式.Cglib动态代理;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

public class PoxyFactory implements MethodInterceptor {


    public Object getPoxyObj(Object target) {
        //创建Enhance对象，类似于jdk动态代理的poxy类，下一步就是设置几个参数
        Enhancer enhancer=new Enhancer();
        //设置父类的字节码对象
        enhancer.setSuperclass(target.getClass());
        //设置回调函数
        enhancer.setCallback(this);
        //创建代理对象
        return enhancer.create();

    }


    /**
     *
     * @param o  代理对象
     * @param method  真实对象种的方法的method实例
     * @param args 实际参数
     * @param methodProxy  代理对象中的方法的method实例
     * @return
     * @throws Throwable
     */


    @Override
    public Object intercept(Object o, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
        System.out.println("动态代理处理逻辑……");
        Object obj = methodProxy.invokeSuper(o, args);
        return obj;
    }
}
